package co.unal.visor.view;

import java.applet.Applet;
import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.Color;
import java.awt.Event;
import java.awt.GradientPaint;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.ScrollPane;
import java.awt.TextField;

import java.awt.Panel;

import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JPopupMenu;
import javax.swing.JScrollPane;
import javax.swing.UIManager;
import javax.swing.WindowConstants;

import co.unal.visor.model.Image;
import co.unal.visor.util.HistoGram;
import co.unal.visor.model.*;

public class VisualizarHistograma extends JFrame {
	private JMenuBar jMenuBar1;
	private JMenu jMenuHistograma;
	private JMenuItem jMenuItemHacerHistograma;
	ScrollPane panelLienzo;
	long[] _arrayDespues_Arreglo;
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	Graphics g2 = getGraphics();

	public void customInitComponents() {

		jMenuBar1 = new JMenuBar();
		jMenuHistograma = new JMenu();
		jMenuItemHacerHistograma = new JMenuItem();
		// Trazar_Histograma();
		this.setSize(800, 600);
		try {
			UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
		} catch (Exception e) {
			e.printStackTrace();
		}

		jMenuItemHacerHistograma.setText("Histograma");
		jMenuHistograma.setText("Calcular");

		jMenuItemHacerHistograma
				.addActionListener(new java.awt.event.ActionListener() {

					public void actionPerformed(java.awt.event.ActionEvent evt) {
						jMenuItemHacerHistogramaActionPerformed(evt);
					}
				});

		jMenuHistograma.getPopupMenu();
		JPopupMenu.setDefaultLightWeightPopupEnabled(false);
		jMenuHistograma.add(jMenuItemHacerHistograma);

		jMenuBar1.add(jMenuHistograma);
		setJMenuBar(jMenuBar1);

		// crea buff strategy par optimizar dibujado
		this.createBufferStrategy(2);
	}

	private void jMenuItemHacerHistogramaActionPerformed(
			java.awt.event.ActionEvent evt) {
		Graphics g = getGraphics();

		g.setColor(Color.LIGHT_GRAY);

		// g.fillRect(250, 250, 40, 50);
		// g.drawRect(250, 250, 40, 50);
		// repaint();
		Trazar_Histograma();
	}

	public VisualizarHistograma(Image _img) {
		this.setVisible(true);
		customInitComponents();
		// Trazar_Histograma();

		hacerHistograma(_img);
		// this.setContentPane(histograma);
		this.setResizable(true);

	}

	public void hacerHistograma(Image _img_) {
		long _inumeroMayor;
		int posicion = 0;
		long[] _arrayHistograma = new long[256];
		_arrayHistograma = _img_.getPixelHistograma();
		_arrayDespues_Arreglo = _arrayHistograma;
		_inumeroMayor = _arrayHistograma[0];

		for (int x = 0; x < _arrayHistograma.length; x++) {
			System.out.println("Numero total en la posicion " + x + ": "
					+ _arrayHistograma[x]);

			if (_arrayHistograma[x] > _inumeroMayor) {
				_inumeroMayor = _arrayHistograma[x];
				posicion = x;
			}
		}
		System.out.println("el numero mayor del arreglo es: " + _inumeroMayor
				+ " la posicion es: " + posicion);
		if (_inumeroMayor > 500) {
			int p = (int) (_inumeroMayor / 500 + 1);

			for (int x = 0; x < _arrayHistograma.length; x++) {
				_arrayDespues_Arreglo[x] = 550 - (_arrayHistograma[x] / p);
				System.out
						.println("Numero total en la posicion " + x + ": "
								+ _arrayDespues_Arreglo[x] + "->"
								+ _arrayHistograma[x]);
			}
		}

		// Trazar_Histograma();
	}

	public void Trazar_Histograma() {
		Graphics g = getGraphics();
		// g.draw3DRect(100, 60, alto, alto, true);
		int numeros = 0;
		int xpos = 50;
		int ypos = 500;
		int ancho = 2;
		int alto = 550;
	//	g.drawRect(50, 50, 700, 550);
		Graphics2D g2d = (Graphics2D) g;
		Color s1 = Color.black;
		Color e = Color.white;
		GradientPaint gradient = new GradientPaint(50, 50, s1, 700, 0, e, true);
		g2d.setPaint(gradient);

		g.fillRect(50, 560, 700, 30);

		int color = 0;
		for (int x = 0; x < 256; x++) {
			numeros = (int) _arrayDespues_Arreglo[x];
			if (color == 0) {
				g.setColor(Color.yellow);
				// g.drawString(xpos+"", xpos, 710);
				g.fillRect(xpos, numeros, ancho, alto - numeros);
				// g.drawRect(xpos, numeros, ancho, alto - numeros);
				// g.drawLine(xpos, ypos, xpos, alto - numeros)1
				// g.drawLine(xpos,ypos , xpos, alto-numeros);;
				xpos = xpos + 2;
				color = 1;
			} else if (color == 1) {
				g.setColor(Color.blue);
				// g.drawString(xpos+"", xpos, 710-10);
				g.fillRect(xpos, numeros, ancho, alto - numeros);
				// g.drawRect(xpos, numeros, ancho, alto - numeros);
				// g.drawLine(xpos, ypos, xpos, alto - numeros)
				// g.drawLine(xpos,ypos , xpos, alto-numeros);;
				xpos = xpos + 2;
				color = 2;
			} else if (color == 2) {

				g.setColor(Color.red);
				// g.drawString(xpos+"", xpos, 710-20);
				g.fillRect(xpos, numeros, ancho, alto - numeros);
				// g.drawRect(xpos, numeros, ancho, alto - numeros);
				// g.drawLine(xpos, ypos, xpos, alto - numeros);
				// g.drawLine(xpos, ypos, xpos, alto - numeros);
				xpos = xpos + 2;
				color = 3;
			} else if (color == 3) {

				g.setColor(Color.green);
				// g.drawString(xpos+"", xpos, 710+30);
				g.fillRect(xpos, numeros, ancho, alto - numeros);
				// g.drawRect(xpos, numeros, ancho, alto - numeros);
				// g.drawLine(xpos,ypos , xpos, alto-numeros);
				// g.drawLine(xpos,ypos , xpos, alto-numeros);
				xpos = xpos + 2;
				color = 4;
			} else if (color == 4) {

				g.setColor(Color.magenta);
				// g.drawString(xpos+"", xpos, 710-40);
				g.fillRect(xpos, numeros, ancho, alto - numeros);
				// g.drawRect(xpos, numeros, ancho, alto - numeros);
				// g.drawLine(xpos,ypos , xpos, alto-numeros);
				// g.drawLine(xpos,ypos , xpos, alto-numeros);
				xpos = xpos + 2;
				color = 5;
			} else if (color == 5) {

				g.setColor(Color.black);
				// g.drawString(xpos+"", xpos, 710-50);
				g.fillRect(xpos, numeros, ancho, alto - numeros);
				// g.drawRect(xpos, numeros, ancho, alto - numeros);
				// g.drawLine(xpos,ypos , xpos, alto-numeros);
				xpos = xpos + 2;
				color = 0;
			}

		}

		// g.drawString(arg0, arg1, arg2)

		// g.fillRect(x, y, width, height);

		// g.drawLine(x1, y1, x2, y2)
		// g.drawRect(x, y, width, height)
		// g.draw3DRect(x, y, width, height, raised)

	}

}
